#ifndef __SC_PROGRAM_STATE_H__
#define __SC_PROGRAM_STATE_H__

////////////////////////////////////////////////////////////////////////////////
// Includes
////////////////////////////////////////////////////////////////////////////////

#include <vector>
#include "SCSystem.hpp"
#include "SComputationInfo.hpp"

////////////////////////////////////////////////////////////////////////////////
// Namespaces
////////////////////////////////////////////////////////////////////////////////

namespace SC {

////////////////////////////////////////////////////////////////////////////////
// Implementation
////////////////////////////////////////////////////////////////////////////////

/// SC program state used to memorised the system in its current state.
struct SCProgramState {

	/// Number of elapsed iterations
	unsigned int nb_iterations;
		
	/// Number of elapsed computations
	unsigned int nb_computations;

	/// Systems
	std::vector<SCSystem> systems;

	/// Context systems pointers
	std::vector<SCSystem*> contexts;

	/// Currently eligible contexts list
	std::vector<SCSystem*> pr_contexts;
		
	/// Last recorded computation
	SComputationInfo last_computation;

};

////////////////////////////////////////////////////////////////////////////////
// Closing Namespaces
////////////////////////////////////////////////////////////////////////////////

}

////////////////////////////////////////////////////////////////////////////////

#endif
